Amazon DynamoDB คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
สวัสดีครับทุกคน ทาคาคุนิ ครับ
รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง
นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว
เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว
แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ
งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "Amazon DynamoDB" ครับ
Amazon DynamoDB คืออะไร
ถ้าจะให้พูดเกี่ยวกับ Amazon DynamoDB ในคำเดียวก็คือ "Fully managed NoSQL database Service" ครับ
Fully managed หมายความว่าอย่างไร
Fully managed Service หมายถึง Service ที่ AWS จะดูแลจัดการและดำเนินการเอง
เช่น
- Hardware provisioning, configuration, replication
- Software patch application
- Cluster scaling
NoSQL หมายความว่า
NoSQL เป็นคำที่ถูกย่อมาจาก "Not Only SQL" บ่อยๆ ด้วยการที่มันเป็น "Not Only SQL" ทำให้สามารถบันทึกข้อมูลอื่นที่ไม่ใช่รูปแบบ SQL ได้ด้วยนั่นเอง
หรือก็คือ NoSQL สามารถกำหนดเป็น Database สำหรับแบบ Data Model หลายๆแบบได้
โดยสามารถอ่านรายละเอียดเพิ่มเติมได้ที่
โครงสร้าง
Table, Item, Attributes
Table คืออะไร
Table คือ ตารางเป็นทรัพยากรที่รวบรวมรายการ Resource ต่างๆ เช่นเดียวกับ Databases อื่นๆ โดย DynamoDB จะบันทึกเก็บข้อมูลไว้ที่ Table(ไว้ในตาราง)
Item คืออะไร
ถ้าจะเปรียบเทียบให้เข้าใจ Item ก็คือ ส่วนที่เรียกว่า "row" ของ SQL ครับ
แต่ละ Item จะมี Primary key อยู่เสมอ
Primary key คือตัวระบุที่ไม่ซ้ำ ใช้เพื่อแยกแยะ Item ใน Table
กรณีอย่างในรูปด้านบน "id" "LastName" เป็นส่วนที่ไม่ซ้ำกัน สามารถนำมาเป็น Primary key ได้
แต่ว่า "LastName" เป็นส่วนที่โอกาสที่จะซ้ำสูงเมื่อเพิ่ม Item ใหม่เข้าไป ส่วนใหญ่จึงแนะนำให้ใช้ "id" เป็น Primary key
Table เป็น Schemaless ครับ หมายความว่า ไม่จำเป็นต้องกำหนด Attributes หรือ Data Type ล่วงหน้าครับ
แต่ละ Item สามารถมี Attributes ที่ไม่ซ้ำ และ ไม่เหมือนใครได้ (ถ้าในรูปภาพก็ให้สังเกต Attributes"County")
Item บางส่วน มี Attributes ที่ซ้อนกัน (Address)
DynamoDB ซัพพอร์ต Attributes ที่ซ้อนกันได้ลึกถึง 32 Level
Attributes คืออะไร
ถ้าจะเปรียบเทียบให้เข้าใจ Attributes ก็คือ ส่วนที่เรียกว่า "column" ของ SQL ครับ
ค่าใน Attributes สามารถใส่ซ็ำกันได้ แล้วมีการซัพพอร์ตความลึกถึง 32 Level ครับ
Primary key
ตามที่เขียนข้อความไว้ด้านบนว่า Primary key คือตัวระบุที่ไม่ซ้ำ ใช้เพื่อแยกแยะ Item ใน Table
DynamoDB มีการซัพพอร์ต Primary key 2 ชนิดที่แตกต่างกัน
Partition key
Primary key อย่างง่ายที่ประกอบด้วย Attribute เดียว
Partition key นอกจากที่จะใช้เป็น Primary key แล้ว ยังสามารถใช้เพื่อแบ่ง Partition ที่เก็บข้อมูล ได้ด้วย
Composite primary key
Composite primary key หรือที่รู้จักกันในอีกชื่อ "Partition key and sort key" เป็นรูปแบบการเชื่อมต่อ Partition กับ sort key และใช้เป็น primary key ครับ
โดยสามารถอ่านข้อมูลเพิ่มเติมได้ที่
Availability
DynamoDB จะถูกเก็บไว้ใน 3 AZ(Availability Zone) เป็นรูปแบบที่สามารถป้องกันเมื่อตัวใดตัวนึงเสียหาย
แล้วยังมีการ Partitioning โดยอัตโนมัติ ทำให้สามารถแก้ไขปัญหาในเรื่องพื้นที่เก็บข้อมูลไม่พอได้โดยอัตโนมัติ
โดยสามารถดู ADVANCED DESIGN PATTERNS FOR AMAZON DYNAMODB ได้ที่ลิ้งค์ด้านล่างนะครับ
Performance
Consistency model(รูปแบบความสม่ำเสมอ)
การเขียนข้อมูล
การเขียนข้อมูลของ DynamoDB เป็นแบบ "eventually consistent" ครับ
ถ้าจะอธิบายให้เห็นภาพก็คือ DynamoDB จะรับทราบ (200 OK) เมื่อได้รับการยืนยันว่าการเขียนอย่างน้อย 2 AZ เสร็จสิ้นแล้ว
ทำให้เวลาเราเลือกอ่านข้อมูลโดยเลือก "Eventual consistency" อาจจะมีบาง AZ ที่ยังไม่ได้รับการอัพเดทข้อมูล
การอ่านข้อมูล
Read Consistency - Amazon DynamoDB
DynamoDB supports eventually consistent and strongly consistent reads.
วิธีการอ่านข้อมูลมี 2 ชนิด คือ "eventually consistent" กับ "strongly consistent" ครับ
โดย Default จะเลือก "eventually consistent" ไว้ให้ครับ
การเลือกอ่านข้อมูลแบบ "strongly consistent" จะเป็นการอ่านแบบมีการรับประกันความสม่ำเสมอ แต่เมื่อเทียบกับ "eventually consistent" แล้วอาจจะมี Latency ที่มากขึ้น
Security
Data encryption
DynamoDB สามารถรองรับการเข้ารหัส KMS เมื่อไม่ได้ใช้งาน
- AWS-owned key: คีย์ที่จัดการโดย AWS, DynamoDB เป็นเจ้าของ
- AWS Managed Key: คีย์ที่จัดการโดย AWS, KMS เป็นเจ้าของ
- Customer managed key: คีย์ที่สามารถสร้าง, เป็นเจ้าของ, ควบคุม โดยตัวลูกค้าเอง User ยังสามารถตั้งค่าการควบคุมการเข้าถึงสำหรับคีย์ได้ด้วย
Access control
โดยพื้นฐานแล้ว การเข้าควบคุม Tables ของ DynamoDB จำเป็นต้องผ่าน API
ทำให้เราสามารถควบคุมการเข้าใช้(Access control)ได้โดยการใช้ IAM Policy ครับ
โดย Policy ด้านล่างนี้จะเป็นการอณุญาตให้ Account (123456789012) เข้าไปอ่าน Table Books ได้ครับ
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyAPIActionsOnBooks", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }
Network Security
การเชื่อมต่อจาก private network โดยไม่ต้องผ่าน internet
สำหรับ On-premise สามารถใช้ AWS Site-to-Site VPN หรือ AWS Direct Connect เพื่อเข้าใช้งานได้
คุณสามารถใช้ Gateway ของ VPC Endpoint เพื่อเข้าไปใช้งานข้างใน VPC ได้
กรุณาระวัง DynamoDB ไม่ทำการซัพพอร์ตการเชื่อมต่อจาก On-premise ด้วย VGW, VPC Endpoint
Monitoring และ logging
logging
เราสามารถเข้าถึง Table ของ DynamoDB ผ่าน API
ทำให้เราสามารถดู Access Logs จะถูกเก็บอยู่ที่ "CloudTrail" ครับ
Logs ที่ถูกเก็บไว้จะถูก API แบ่งออกเป็น 2 ชนิดคือ "Control Plane" กับ "Data Plane"
ให้ระวังกันต้องที่เปิดดู Logs นะครับ
Logging DynamoDB Operations by Using AWS CloudTrail - Amazon DynamoDB
Metrics
เราสามารถดู Metrics ของ DynamoDB ได้ที่ CloudWatch ครับ
และยังสามารถปรับขนาดปริมาณงานการอ่าน/เขียนตามเกณฑ์ Metrics ได้โดยอัตโนมัติอีกด้วย
DynamoDB Metrics and Dimensions - Amazon DynamoDB
Managing Throughput Capacity Automatically with DynamoDB Auto Scaling - Amazon DynamoDB
สรุป
เป็นยังไงกันบ้างครับกับ Amazon DynamoDB ถ้าใครถามว่า AWS มี NoSQL ไหม เจ้านี้คือตัวแรกที่ผมนึกถึงครับ
เป็นตัวมีที่ความสามารถในด้าน Availability เหมือนกับ Database ตัวอื่น(AZ 3โซน) ถ้าใครมีโอกาสที่จะใช้ Amazon DynamoDB ในอนาคต หรือ อยากรู็เกี่ยวกับ Amazon DynamoDB แล้วเข้ามาอ่านบทความนี้ ผมก็หวังว่าจะเป็นประโยชน์ได้ความรู้กลับไปนะครับ แล้วเจอกันใหม่ในบทความต่อไปครับ
บทความต้นฉบับ
AWS再入門ブログリレー2022 Amazon DynamoDB編 | DevelopersIO